A bus is a component of a computer system that supplies a physical connection to hardware devices. There are a number of different bus architectures with different electrical and logical characteristics. Peripheral Component Interconnect (PCI) is one type of bus architecture. See, e.g., PCI Local Bus Specification Revision 2.2, released Dec. 18, 1998. The Plug-and-Play (PnP) hardware standard is incorporated into the design for PCI. See, for example, Plug and Play Design Specification for Institute of Electrical and Electronics Engineers (IEEE) 1394 version 1.0c, published Mar. 3, 1999; revisions May 1999.
The goal of PnP is to enable a user to plug a new hardware device into a computer, and immediately be able to use the hardware device without the user performing complicated configuration tasks. In order for PnP to work, the computer's basic input/output system (BIOS) and operating system, and the hardware device being installed, among other things, must be PnP compliant. One of the complicated configuration tasks a user avoids when installing a PnP hardware device is resource allocation. Resources, also known as system resources, are used for communication and information transfer among hardware devices in a computer. An interrupt request (IRQ) and a direct memory access (DMA) are examples of resources.
With PnP, the computer's BIOS and operating system allocate resources as part of the configuration process, without the need for user input. At power-up, the BIOS identifies a hardware device on a particular bus, and generates configuration information for the hardware device. The BIOS repeats this process until configuration information is generated for each hardware device on each bus of the computer. BIOS-assigned configuration information is referred to as raw configuration information, because it is bus-specific information.
Once the BIOS assigns raw configuration information for the hardware devices, the operating system completes the configuration process. Bus-specific enumerators in the operating system access raw BIOS-assigned configuration information for hardware devices, and store the raw BIOS-assigned configuration information in an area of the operating system called the registry. The operating system then converts the raw BIOS-assigned configuration information into translated information which the operating system can access without regard to the configuration information's bus, and stores the translated configuration information in the registry. The translated configuration information for a hardware device is referred to as a translated resource descriptor. The translated resource descriptor contains a list of partial resource descriptors for the hardware device. Each partial resource descriptor identifies a resource, e.g., an IRQ, allocated to the hardware device.
Once resources are allocated, the operating system loads the device driver for the hardware device. A device driver is software that controls the physical functions of a hardware device, and manages data transfers for the hardware device. After loading the device driver, the operating system transmits to the device driver the translated resource descriptor for the device.
If a device driver for a hardware device does not load properly, the hardware device will not function. In that case, a user can run a diagnostic program to determine the source of the problem. The PROSet Utility, manufactured by Intel Corporation of Santa Clara, Calif., is an example of such a diagnostic program. The operating system loads a device driver provided with the diagnostic program that is different than the device driver that failed to properly load. The diagnostic program can then perform tests to determine why the hardware device's device driver failed to properly load.
Like the hardware device's device driver, the diagnostic program's device driver needs the translated resource descriptor for the hardware device in order to function properly. However, because the diagnostic program's device driver is not the device driver for the hardware device, the operating system does not transmit the translated resource descriptor to the diagnostic program's device driver.
A kernel mode device driver can access the translated resource descriptor of a PnP hardware device connected to a PCI bus, for example, even though the kernel mode device driver is not the device driver for the PnP hardware device, if the computer is running a Windows PnP compliant operating system, manufactured by Microsoft Corporation of Redmond, Wash. If a diagnostic program is using a kernel mode device driver, the kernel mode device driver can make “legacy operating system calls” to the Windows operating system's hardware abstraction layer (HAL) to access the translated resource descriptor for the PnP hardware device. The diagnostic program can then determine why the hardware device's device driver failed to properly load. However, it is contemplated that future releases of Windows PnP complaint operating systems will not respond to legacy operating system calls to the HAL. Thus, a kernel mode device driver utilized by a diagnostic program will not be able to access the translated resource descriptor of a PnP hardware device connected to a PCI bus.